// loyalist.txt
// A modified version of basicnpc.txt, with a few special bits tucked away.
//  Governs the behavior of Darkside Loyalists in the scenario The Siege of
//  Copperpeak.
// Memory Cells:
//   Cell 0 - How creature moves.
//     0 - If 0, wander randomly. 
//     1 - Stands still until a target appears.
//     2 - Completely immobile, even if target appears.
//   Cell 1,2 - Stuff done flag. If both 0, nothing. Otherwise when this 
//     is killed, set to 1. (Example: If cell 1 is 3 and cell 2 is 5, when
//     creature is killed, sets SDF(3,5) to 1.)
//   Cell 3 - Dialogue node to start with if talked to. if left at 0, this
//     character doesn't talk.
//   Cell 9 - Special:
//     0 - Nothing.
//	   1 - "(name) is too terrified to speak." upon talking.
//     2 - "You think better of striking up a conversation..." for use
//			at docks. Second attempt at talking turns town hostile.
//     3 - Check for armor in START_STATE. If not safe, then turn my 
//          group hostile. Also uses the talking properties of special
//          #2. Used in Town 10.

begincreaturescript;

variables;

short i,target;
short safety, pc_counter;

body;

beginstate INIT_STATE;
	if (get_memory_cell(0) == 2)
		set_mobility(ME,0);
	
	safety = 0;
		
break;

beginstate DEAD_STATE;
	// Set the appropriate stuff done flag for this character being dead
	if ((get_memory_cell(1) != 0) || (get_memory_cell(2) != 0))
		set_flag(get_memory_cell(1),get_memory_cell(2),1);
break;

beginstate START_STATE; 

	//check for armor if party is visible (special: 3)
	if(get_memory_cell(9) == 3) {
		//only if party is visible to me
		// ...and don't bother if the jig is up
		if((can_see_char(1000) == 1) && (get_flag(10,2) != 1)) {
			//check to see if armor is equipped
			pc_counter = 0;
			safety = 0;
			while((pc_counter < 4) && (safety == 0)) {
				if((char_ok(pc_counter) == 1) && (item_type_in_slot(pc_counter,0) != 447))
					safety = 1; //not safe if armor isn't equipped
				pc_counter = pc_counter + 1;
				}
			if(safety == 1) {
				print_str_color("One of the Loyalists shouts an alarm. You've been spotted!",2);
				set_attitude(1000 + what_group_in(ME), 10);
				alert_char(1000 + what_group_in(ME));
				set_flag(10,2,1);
				}
			}
		}

	// if I have a target for some reason, go attack it
	if (target_ok()) {
		if (dist_to_char(get_target()) <= 16)
			set_state(3);
			else set_target(ME,-1);
		}
	
	// Look for a target, attack it if visible
	if (select_target(ME,8,0)) {
		do_attack();
		set_state(3);
		}
		
	// Have I been hit? Strike back!
	if (who_hit_me() >= 0) {
		set_target(ME,who_hit_me());
		do_attack();
		set_state(3);
		}
		
	// Otherwise, just peacefully move around. Go back to start, if I'm too far
	// from where I started.
	if ((my_dist_from_start() >= 4) || ((my_dist_from_start() > 0) && (get_memory_cell(0) > 0))) {
		if (get_ran(1,1,100) < 40) 
			return_to_start(ME,1);
		}
		else if (get_memory_cell(0) == 0) {
			fidget(ME,25);
			}

	// if we're in combat and the above didn't give me anything to do, just
	// stop now. Otherwise, game will keep running script, and that eats up CPU time.
	if (am_i_doing_action() == FALSE)
		end_combat_turn();
break;

beginstate 3; // attacking
	if (target_ok() == FALSE)
		set_state(START_STATE);
	do_attack();
break;

beginstate TALKING_STATE;

	//too terrified to talk (special: 1)
	if (get_memory_cell(9) == 1) {
		print_named_str(ME, "is too terrified to speak.");
		end();
		}
	
	//don't blow your cover! (special: 2, 3)
	if ((get_memory_cell(9) == 2) || (get_memory_cell(9) == 3)) {
	
		//for the Docks (t5)
		if(current_town() == 5) {
			if(get_flag(5,5) == 1) {
				message_dialog("You try to strike up a conversation with this Loyalist, but he immediately sees something he doesn't like. He shouts an alarm and draws his weapon.","");
				set_flag(5,1,1);
				}
			else {
				message_dialog("It occurs to you that if you're trying to sneak past these Loyalists, striking up a conversation might not be the best plan.","");
				set_flag(5,5,1);
				end();
				}
			}
		//for the Gates (t10)
		if(current_town() == 10) {
			if(get_flag(10,3) == 1) {
				message_dialog("You try to strike up a conversation with this Loyalist, but he immediately sees something he doesn't like. He shouts an alarm and draws his weapon.","");
				print_str_color("One of the Loyalists shouts an alarm. You've been spotted!",2);
				set_attitude(1000 + what_group_in(ME), 10);
				alert_char(1000 + what_group_in(ME));
				set_flag(10,2,1);
				}
			else {
				message_dialog("It occurs to you that if you're trying to sneak past these Loyalists, striking up a conversation might not be the best plan.","");
				set_flag(10,3,1);
				end();
				}
			}
		
		
		
		//options for other towns would go here
		
		}

	if ((get_memory_cell(9) == 0) && (get_memory_cell(3) == 0)) {
		print_str("Talking: It doesn't respond.");
		end();
		}
	else if(get_memory_cell(3) > 0)
		begin_talk_mode(get_memory_cell(3));
break;